home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 10
/
amigaformatcd10.iso
/
-screenplay-
/
shareware
/
mris 1.1
/
.mris1_1src.lha
/
ChangeUser.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-10-09
|
7KB
|
261 lines
#define MYLIB_BOOPSI
#ifndef INTUITION_GADGETCLASS_H
#include <intuition/gadgetclass.h>
#endif
#ifndef INTUITION_IMAGECLASS_H
#include <intuition/imageclass.h>
#endif
#include <proto/layers.h>
#include "xmris.h"
#include "ChangeUser.h"
#include "BOOPSILib.h"
#include "Catalog.h"
/************************************************************************/
struct Window *ChangeUserWindow;
/************************************************************************/
static Object *Contents;
static Object *String, *UseButton;
static struct TagItem WindowTags[]=
{
{WA_Left, ~0},
{WA_Top, ~0},
{WA_Height, 0},
{WA_Width, 0},
{WA_CustomScreen, (ULONG)NULL},
{WA_IDCMP, IDCMP_CLOSEWINDOW | IDCMP_GADGETUP | IDCMP_ACTIVEWINDOW | IDCMP_NEWSIZE},
{WA_MaxWidth, 0},
{WA_MaxHeight, 0},
{WA_MinWidth, 0},
{WA_MinHeight, 0},
{WA_Gadgets, NULL},
{WA_Flags, WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | WFLG_SIMPLE_REFRESH | WFLG_ACTIVATE | WFLG_RMBTRAP | WFLG_NEWLOOKMENUS | WFLG_NOCAREREFRESH},
{TAG_DONE}
};
/************************************************************************/
void CloseChangeUserWindow(void)
{
if (ChangeUserWindow!=NULL)
{
LockLayerInfo(ChangeUserWindow->WLayer->LayerInfo);
WindowTags[0].ti_Data=ChangeUserWindow->LeftEdge;
WindowTags[1].ti_Data=ChangeUserWindow->TopEdge;
WindowTags[2].ti_Data=ChangeUserWindow->Height;
WindowTags[3].ti_Data=ChangeUserWindow->Width;
UnlockLayerInfo(ChangeUserWindow->WLayer->LayerInfo);
CloseWindowSafely(ChangeUserWindow);
ChangeUserWindow=NULL;
}
DisposeObject(Contents);
Contents=NULL;
FreeBOOPSIClasses();
}
/************************************************************************/
void OpenChangeUserWindow(void)
{
if (ChangeUserWindow==NULL)
{
if (CreateBOOPSIClasses())
{
char *UseLabel, *CancelLabel;
UseLabel=GetString(MSG_USE_BUTTON);
CancelLabel=GetString(MSG_CANCEL_BUTTON);
Contents=BOOPSILibO(Root),
BOOPSILibA_Group_Spacing, (1<<16)|1,
BOOPSILibA_Group_Child, BOOPSILibO(Frame),
IA_FrameType, FRAME_RIDGE,
BOOPSILibA_Frame_Gadget, String=BOOPSILibO(String),
STRINGA_MaxChars, sizeof(scoring.UserName),
STRINGA_TextVal, scoring.UserName,
GA_ID, MSG_GAME_USER_MENU,
BOOPSILibO_End, /* String */
BOOPSILibO_End, /* Frame */
BOOPSILibA_Group_Child, BOOPSILibO(Group),
BOOPSILibA_Group_Horizontal, TRUE,
BOOPSILibA_Group_SameSize, TRUE,
BOOPSILibA_Group_Child, BOOPSILibO(Frame),
IA_FrameType, FRAME_BUTTON,
BOOPSILibA_Frame_Space, (40<<8),
BOOPSILibA_Frame_Gadget, UseButton=BOOPSILibO(Button),
GA_Text, UseLabel+1,
BOOPSILibA_ControlChar, *UseLabel,
GA_ID, MSG_USE_BUTTON,
BOOPSILibO_End, /* Button */
BOOPSILibO_End, /* Frame */
BOOPSILibA_Group_Child, BOOPSILibO(Frame),
IA_FrameType, FRAME_BUTTON,
BOOPSILibA_Frame_Space, (40<<8),
BOOPSILibA_Frame_Gadget, BOOPSILibO(Button),
GA_Text, CancelLabel+1,
BOOPSILibA_ControlChar, *CancelLabel,
GA_ID, MSG_CANCEL_BUTTON,
BOOPSILibO_End, /* Button */
BOOPSILibO_End, /* Frame */
BOOPSILibO_End, /* Group */
BOOPSILibO_End; /* Group */
if (Contents!=NULL)
{
WindowTags[4].ti_Data=(ULONG)display.Screen->Screen;
WindowTags[5].ti_Tag=WA_IDCMP;
if (DoMethod(Contents,BOOPSILibM_Root_Init,WindowTags,20)==0)
{
WindowTags[5].ti_Tag=TAG_IGNORE;
ChangeUserWindow=OpenWindowTags(NULL,
WA_ScreenTitle, display.window->ScreenTitle,
WA_Title, GetString(MSG_CHANGEUSER_TITLE),
TAG_MORE, WindowTags);
if (ChangeUserWindow!=NULL)
{
ChangeUserWindow->UserPort=&WindowPort;
if (ModifyIDCMP(ChangeUserWindow,WindowTags[5].ti_Data))
{
ActivateGadget((struct Gadget *)String,ChangeUserWindow,NULL);
return;
}
}
}
}
}
CloseChangeUserWindow();
}
else
{
ShowWindow(ChangeUserWindow);
}
}
/************************************************************************/
static int NormalizeUser(char *User)
{
WORD Space;
WORD i;
int Changed;
Changed=FALSE;
Space=TRUE;
for (i=0; User[i]!='\0'; i++)
{
if (User[i]==' ')
{
if (Space)
{
int j;
for (j=i; (User[j]=User[j+1])!='\0'; j++)
;
i--;
Changed=TRUE;
}
else
{
Space=TRUE;
}
}
else
{
Space=FALSE;
}
}
if (Space && i>0)
{
User[i-1]='\0';
Changed=TRUE;
}
return Changed;
}
/************************************************************************/
static int NormalizeUserGadget(char *User)
{
WORD Position;
Position=RemoveGadget(ChangeUserWindow,(struct Gadget *)String);
strcpy(User,(char *)AttrGet(String,STRINGA_TextVal));
if (NormalizeUser(User))
{
SetAttrs((struct Gadget *)String,STRINGA_TextVal,User,TAG_DONE);
}
AddGadget(ChangeUserWindow,(struct Gadget *)String,Position);
RefreshGList((struct Gadget *)String,ChangeUserWindow,NULL,1);
return User[0]!='\0';
}
/************************************************************************/
void ProcessChangeUserWindow(struct IntuiMessage *Message)
{
if ((Message=(struct IntuiMessage *)DoMethod(Contents,BOOPSILibM_Root_ProcessMessage,Message))!=NULL)
{
switch (Message->Class)
{
case IDCMP_GADGETUP:
{
switch (((struct ExtGadget *)Message->IAddress)->GadgetID)
{
case MSG_GAME_USER_MENU:
case MSG_USE_BUTTON:
{
char User[80];
assert(sizeof(User)==sizeof(scoring.UserName));
if (NormalizeUserGadget(User))
{
GS_ReleaseScoreHandle(scoring.ScoreHandle);
scoring.ScoreHandle=NULL;
strcpy(scoring.UserName,User);
UpdateWindowTitle();
/* fall through */
case MSG_CANCEL_BUTTON:
DoMethod(Contents,BOOPSILibM_Root_ReplyMessage,Message);
CloseChangeUserWindow();
return;
}
}
ActivateGadget((struct Gadget *)String,ChangeUserWindow,NULL);
break;
}
}
break;
case IDCMP_CLOSEWINDOW:
DoMethod(Contents,BOOPSILibM_Root_ReplyMessage,Message);
CloseChangeUserWindow();
return;
case IDCMP_ACTIVEWINDOW:
case IDCMP_NEWSIZE:
ActivateGadget((struct Gadget *)String,ChangeUserWindow,NULL);
break;
}
DoMethod(Contents,BOOPSILibM_Root_ReplyMessage,Message);
}
}